/*
 * ......................................&&.........................
 * ....................................&&&..........................
 * .................................&&&&............................
 * ...............................&&&&..............................
 * .............................&&&&&&..............................
 * ...........................&&&&&&....&&&..&&&&&&&&&&&&&&&........
 * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............
 * ................&...&&&&&&&&&&&&&&&&&&&&&&&&&&&&.................
 * .......................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........
 * ...................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...............
 * ..................&&&   &&&&&&&&&&&&&&&&&&&&&&&&&&&&&............
 * ...............&&&&&@  &&&&&&&&&&..&&&&&&&&&&&&&&&&&&&...........
 * ..............&&&&&&&&&&&&&&&.&&....&&&&&&&&&&&&&..&&&&&.........
 * ..........&&&&&&&&&&&&&&&&&&...&.....&&&&&&&&&&&&&...&&&&........
 * ........&&&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&....&&&.......
 * .......&&&&&&&&.....................&&&&&&&&&&&&&&&&.....&&......
 * ........&&&&&.....................&&&&&&&&&&&&&&&&&&.............
 * ..........&...................&&&&&&&&&&&&&&&&&&&&&&&............
 * ................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............
 * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&..&&&&&............
 * ..............&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&....&&&&&............
 * ...........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......&&&&............
 * .........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........&&&&............
 * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&............
 * ......&&&&&&&&&&&&&&&&&&&...&&&&&&...............&&&.............
 * .....&&&&&&&&&&&&&&&&............................&&..............
 * ....&&&&&&&&&&&&&&&.................&&...........................
 * ...&&&&&&&&&&&&&&&.....................&&&&......................
 * ...&&&&&&&&&&.&&&........................&&&&&...................
 * ..&&&&&&&&&&&..&&..........................&&&&&&&...............
 * ..&&&&&&&&&&&&...&............&&&.....&&&&...&&&&&&&.............
 * ..&&&&&&&&&&&&&.................&&&.....&&&&&&&&&&&&&&...........
 * ..&&&&&&&&&&&&&&&&..............&&&&&&&&&&&&&&&&&&&&&&&&.........
 * ..&&.&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&&&&&&&&&&&&.......
 * ...&&..&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&...&&&&&&&&&&&&......
 * ....&..&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&&&&&.....
 * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............&&&&&&&....
 * .......&&&&&.&&&&&&&&&&&&&&&&&&..&&&&&&&&...&..........&&&&&&....
 * ........&&&.....&&&&&&&&&&&&&.....&&&&&&&&&&...........&..&&&&...
 * .......&&&........&&&.&&&&&&&&&.....&&&&&.................&&&&...
 * .......&&&...............&&&&&&&.......&&&&&&&&............&&&...
 * ........&&...................&&&&&&.........................&&&..
 * .........&.....................&&&&........................&&....
 * ...............................&&&.......................&&......
 * ................................&&......................&&.......
 * .................................&&..............................
 * ..................................&..............................
 */

/*
 * @Author: silence
 * @Date: 2022-04-27 11:47:26
 * @LastEditors: silence
 * @LastEditTime: 2022-04-27 15:30:38
 * @Description: 页面基类
 */

import 'package:flutter/material.dart';

import '../res.dart';
import '../utils/color/ColorUtils.dart';
import '../widgets/MyLocalImage.dart';
import '../widgets/MyText.dart';
import 'MyAppBar.dart';

class MyScaffold extends StatefulWidget {
  /// 是否隐藏导航条
  final bool? navBarHide;

  /// 是否隐藏状态栏
  final bool? stateBarHide;

  /// 是否隐藏返回按钮
  final bool? leftBackButtonHide;

  /// 左边按钮
  final Widget? leadingWidget;

  /// 标题
  final String? title;

  /// title
  final Widget? titleWidget;

  /// appbar颜色，默认白色
  final Color? appBarColor;

  /// 右侧按钮
  final Widget? trailingWidget;

  /// 主体
  final Widget? body;

  ///  侧边栏
  final Widget? drawer;

  /// 背景颜色
  final Color? backgroundColor;

  /// 底部分割线
  final bool? bottomline;

  /// 左边按钮图片
  final String? leadingImgPath;

  /// 底部导航条
  final Widget? bottomNavigationBar;

  /// 是否自动适配底部Inset,默认为true
  final bool? resizeToAvoidBottomInset;

  final Widget? floatingActionButton;
  final Function? back;
  final Color? navBarbackgroundColor;

  const MyScaffold({
    Key? key,
    this.navBarHide = false,
    this.leftBackButtonHide,
    this.title,
    this.titleWidget,
    this.leadingWidget,
    this.trailingWidget,
    this.body,
    this.backgroundColor,
    this.stateBarHide = false,
    this.bottomNavigationBar,
    this.appBarColor,
    this.bottomline = false,
    this.leadingImgPath,
    this.resizeToAvoidBottomInset,
    this.floatingActionButton,
    this.back,
    this.navBarbackgroundColor,
    this.drawer,
  }) : super(key: key);

  @override
  State<MyScaffold> createState() => _MyScaffoldState();
}

class _MyScaffoldState extends State<MyScaffold> {
  @override
  Widget build(BuildContext context) {
    return MediaQuery.removePadding(
      removeTop: widget.stateBarHide!,
      context: context,
      child: Scaffold(
          resizeToAvoidBottomInset: widget.resizeToAvoidBottomInset,
          backgroundColor: widget.backgroundColor ?? Colors.white,
          appBar: MyAppBar(
            navBarHeight: (widget.navBarHide == true) ? 0 : 44,
            backgroundColor:
                widget.navBarbackgroundColor ?? ColorUtils.nav_bar_bg,
            leadingWidget: widget.leadingWidget ?? backButton(),
            titleWidget: widget.titleWidget ?? titleView(),
            trailingWidget: widget.trailingWidget,
            bottomline: widget.bottomline,
          ),
          body: widget.body,
          drawer: widget.drawer,
          floatingActionButton: widget.floatingActionButton,
          //
          floatingActionButtonLocation: CustomFloatingActionButtonLocation(
              FloatingActionButtonLocation.miniEndFloat, -20, -20),
          bottomNavigationBar: widget.bottomNavigationBar),
    );
  }

  /// @description: 默认返回按钮
  Widget backButton() {
    return (widget.leftBackButtonHide == true)
        ? Container()
        : GestureDetector(
            onTap: () {
              if (widget.back != null) {
                widget.back!();
                return;
              }
              // 如果可以返回，就返回呗
              if (Navigator.canPop(context)) Navigator.pop(context);
            },
            behavior: HitTestBehavior.translucent,
            child: Container(
              alignment: Alignment.center,
              width: 44,
              height: 44,
              child: MyLocalImage(
                widget.leadingImgPath ?? Res.sys_icon_back3x,
                width: 24,
                height: 24,
              ),
            ));
  }

  Widget titleView() {
    return Container(
      padding: const EdgeInsets.only(right: 20),
      child: MyText(widget.title ?? "",
          textDirection: TextDirection.ltr,
          style: TextStyle(
              fontSize: 17,
              color: ColorUtils.nav_bar_title,
              fontWeight: FontWeight.bold)),
    );
  }
}

class CustomFloatingActionButtonLocation extends FloatingActionButtonLocation {
  FloatingActionButtonLocation location;
  double offsetX; // X方向的偏移量
  double offsetY; // Y方向的偏移量
  CustomFloatingActionButtonLocation(this.location, this.offsetX, this.offsetY);

  @override
  Offset getOffset(ScaffoldPrelayoutGeometry scaffoldGeometry) {
    Offset offset = location.getOffset(scaffoldGeometry);
    return Offset(offset.dx + offsetX, offset.dy + offsetY);
  }
}
